library(RGtk2)
library(rgl)

# positions x y z rayon color des 1000 spheres, générés aléatoirement
.data<-list(x=rnorm(1000),y=rnorm(1000),z=rnorm(1000),radius=runif(1000),color=rainbow(1000))

# bouton 1 qui permet de faire spawn la fenetre
fn_btn_1 <-function(button,user.data){
	open3d() # ouverture de la fenêtre rgl
	# spawn des spheres d'apres les données de datac
	points3d(.data$x,.data$y,.data$z)
}

# bouton 2 qui permet d'activer la selection
# l'evenement se produira une fois
fn_btn_2 <-function(button,user.data){
	# on stocke dans f le vecteur d'elements selectionnes
	f<-rgl.select3d()
	# en comparant les elements présent dans f et l'ensemble des elements
	# généré dans datac, nous arrivons à stocker dans keep un vecteur de 
	# boolens :
	# - TRUE si l'element corespondant de datac est dans la selection
	# - FALSE sinon
	keep<-f(.data$x,.data$y,.data$z)
	# on vide la scène rgl de tout les elements qui s'y trouvaient
	rgl.pop()
	# on fait réapparaitre les points de datac si celle-ci sont présentes
	# dans keep, cad qu'elle ont été sélectionnées. Leur couleur imposée
	# localement est rouge.
	points3d(.data$x[keep],.data$y[keep],.data$z[keep],color="red")
	# les autres points de datac, celles qui ne sont pas sélectionnées, sont
	# affichées avec leurs couleurs générées aléatoirement
	points3d(.data$x[!keep],.data$y[!keep],.data$z[!keep],color="black")

	if(is.null(.data$x[keep]))
		print("bouh")
}




fenetre = gtkWindow()
fenetre$title="Test nuages"
superpanel = gtkVBoxNew(FALSE,8)
frame=gtkFrameNew()
fenetre$add(frame)
frame$add(superpanel)
# Add button
	the.buttons <- gtkHButtonBoxNew()
	the.buttons$setBorderWidth(5)
	the.buttons$setLayout("spread")
the.buttons$setSpacing(20)
	superpanel$add(the.buttons)
	btn1 = gtkButton("Button1")
	btn2 = gtkButton("Button2")
	gSignalConnect(btn1,"clicked",fn_btn_1)
	gSignalConnect(btn2,"clicked",fn_btn_2)
the.buttons$packStart(btn1,FALSE,FALSE,0)
the.buttons$packStart(btn2,FALSE,FALSE,0)
